package utils;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.regex.Matcher;

import exceptions.IllFormattedLineException;

public final class GNDStringUtils {

	private GNDStringUtils() {

	}

	/**
	 * Zerlegt Feldinhalt in Unterfelder. 
	 * @param implicitIndicator TODO
	 * @param idnInExclamationMarks 
	 * @param fieldString	Mindestens ein Zeichen.
	 * 
	 * @return	Die Unterfelder. Das jeweils erste Zeichen ist der Indikator. 
	 * Die Unterfelder können leere Strings sein, wenn mehrere $ aufeinander
	 * folgen.
	 * 
	 * @throws IllFormattedLineException 
	 */
	public static String[] splitInSubfields(
			String field,
			char implicitIndicator,
			boolean idnInExclamationMarks) throws IllFormattedLineException {
		if (field == null || field.length() == 0)
			throw new IllFormattedLineException(
					"Feld muss mindestens ein Zeichen enthalten");
		String fieldString = field;
		// implizites $9 $8
		if (idnInExclamationMarks && fieldString.charAt(0) == '!') {
			fieldString =
				fieldString
						.replaceFirst("!", Matcher.quoteReplacement("$9"));
			fieldString =
				fieldString
						.replaceFirst("!", Matcher.quoteReplacement("$8"));
		}
		// implizites $a
		if (fieldString.charAt(0) != '$') {
			fieldString = implicitIndicator + fieldString;
		} else {
			fieldString = fieldString.substring(1);
		}
		String[] subfields = fieldString.split("\\$", -1);
		return subfields;
	}

	public static void main(String[] a) throws IllFormattedLineException {
		System.out.println(Arrays.asList(splitInSubfields("!a!s", 'a', true)));
	}
}
